import { onMounted, onUnmounted, nextTick } from 'vue';
import Sortable from 'sortablejs';
export function useDragSort(props, methods) {
    if (props.dragSort) {
        let sortable2;
        let initTime;
        onMounted(() => {
            // 加载完成之后再绑定拖动事件
            initTime = setTimeout(createSortable, 300);
        });
        onUnmounted(() => {
            clearTimeout(initTime);
            if (sortable2) {
                sortable2.destroy();
            }
        });
        function createSortable() {
            let xTable = methods.getXTable();
            // let dom = xTable.$el.querySelector('.vxe-table--fixed-wrapper .vxe-table--body tbody')
            let dom = xTable.$el.querySelector('.body--wrapper>.vxe-table--body tbody');
            let startChildren = [];
            sortable2 = Sortable.create(dom, {
                handle: '.drag-btn',
                direction: 'vertical',
                animation: 300,
                onStart(e) {
                    let from = e.from;
                    // @ts-ignore
                    startChildren = [...from.children];
                },
                onEnd(e) {
                    let oldIndex = e.oldIndex;
                    let newIndex = e.newIndex;
                    if (oldIndex === newIndex) {
                        return;
                    }
                    // 【VUEN-2505】获取当前行数据
                    let rowNode = xTable.getRowNode(e.item);
                    if (!rowNode) {
                        return;
                    }
                    let from = e.from;
                    let element = startChildren[oldIndex];
                    let target = null;
                    if (oldIndex > newIndex) {
                        // 向上移动
                        if (oldIndex + 1 < startChildren.length) {
                            target = startChildren[oldIndex + 1];
                        }
                    }
                    else {
                        // 向下移动
                        target = startChildren[oldIndex + 1];
                    }
                    from.removeChild(element);
                    from.insertBefore(element, target);
                    nextTick(() => {
                        // 【VUEN-2505】算出因虚拟滚动导致的偏移量
                        let diffIndex = rowNode.index - oldIndex;
                        if (diffIndex > 0) {
                            oldIndex = oldIndex + diffIndex;
                            newIndex = newIndex + diffIndex;
                        }
                        methods.doSort(oldIndex, newIndex);
                        methods.trigger('dragged', { oldIndex, newIndex });
                    });
                },
            });
        }
    }
}
